﻿using System;
using System.Windows.Controls;
using System.Windows.Threading;

namespace content.A04
{
    public partial class A0403:Page
    {
        private readonly DispatcherTimer _timer=new DispatcherTimer();
        private int _min,_max;
        private readonly double _smallFontSize;
        private readonly double _bigFontSize;
        private bool _isIntRandom=true;


        public A0403()
        {
            InitializeComponent();
            LabelResult.Content="";

            _smallFontSize=LabelResult.FontSize;
            _bigFontSize=_smallFontSize*2;


            _timer.Tick+=delegate
            {
                LabelResult.Content=(_isIntRandom?RandomHelp.GetIntRandomNumber(_min,_max):RandomHelp.GetDoubleRandomNumber(_min,_max)).ToString();
            };

            ButtonStart.Click+=delegate
            {
                Update(true);
                _timer.Start();
            };
            ButtonStop.Click+=delegate
            {
                _timer.Stop();
                Update(false);
            };
            Update(false);
        }

        private void Update(bool isStarted)
        {
            ButtonStop.IsEnabled=isStarted;
            GroupBox1.IsEnabled=!isStarted;
            ButtonStart.IsEnabled=!isStarted;
            LabelResult.FontSize=isStarted?_smallFontSize:_bigFontSize;
            _isIntRandom=RadioInteger.IsChecked==true;

            if(!isStarted) return;
            if(int.TryParse(TextBoxMax.Text,out _max)==false)
            {
                TextBoxMax.Text="100";
                _max=100;
            }

            if(int.TryParse(TextBoxMin.Text,out _min)==false)
            {
                TextBoxMin.Text="0";
                _min=0;
            }

            if(int.TryParse(TextBoxInterval.Text,out var millSeconds)==false)
            {
                TextBoxInterval.Text="100";
                _timer.Interval=TimeSpan.FromMilliseconds(100);
            }
            else
            {
                _timer.Interval=TimeSpan.FromMilliseconds(millSeconds);
            }
        }
    }

    internal static class RandomHelp
    {
        private static readonly Random R=new Random();

        public static int GetIntRandomNumber(int min,int max)
        {
            return R.Next(min,max+1);
        }

        public static double GetDoubleRandomNumber(int min,int max)
        {
            var d=max*R.NextDouble();
            if(d<min)
            {
                d+=min;
            }

            return Math.Min(d,max);
        }
    }
}